package evol;
import java.util.ArrayList;

import ia.battle.camp.BattleField;
import ia.battle.camp.FieldCell;

public class Nodo {

	private FieldCell fc;
	private Nodo padre;
	private int g,f=Integer.MAX_VALUE;	//F arranca en el peor valor posible para poder asignarle un padre efectivo.

	public Nodo(FieldCell fc, Nodo padre) {
		this.fc = fc;
		this.padre = padre;
		this.g = calcG();
	}

	public FieldCell getFc() {
		return fc;
	}

	public Nodo getPadre() {
		return padre;
	}

	public void setPadre(Nodo padre) {
		this.padre = padre;
	}

	public ArrayList<Nodo> getAdj() {
		ArrayList<Nodo> adj2 = new ArrayList<Nodo>();
		ArrayList<FieldCell> adj = new ArrayList<FieldCell>(BattleField
				.getInstance().getAdjacentCells(this.getFc()));
		for (FieldCell celda : adj) {
			adj2.add(new Nodo(celda, this));
		}
		return adj2;
	}

	public int calcG() {
		// valores 10 para las horizontales 14 para las diagonales
		if (padre != null) {	
			if (padre.getFc().getX() == fc.getX() || padre.getFc().getY() == fc.getY()) {
				return 10 + padre.getG(); // 10 para las xy
			} else {
				return 14 + padre.getG(); //14 para las diagonales
			}
		}else{
			return 0;
		}
	}
	public int getG(){
		return g;
	}

	public int getF(int estimado,Nodo padre) {
		if(this.g + estimado<this.f){
			this.setPadre(padre);
			this.f = this.g + estimado;
		}
		return f;
	}
	public int getF(){
		return f;
	}

}
